from BoletoDados import BoletoDados
import os.path

class BoletoDadosBancoReal( BoletoDados ):

    def __init__(self):
        BoletoDados.__init__(self)
        self.setCodigoBanco("356")

    def setNossoNumero(self, txt):
        txt = self.formataNumero(txt, 13)
        BoletoDados.setNossoNumero(self,txt)

    def setAgenciaCedente(self, txt):
        txt = self.formataNumero(txt, 4)
        BoletoDados.setAgenciaCedente(self,self.formataNumero(txt, 4))

    def setContaCedente(self, txt):
        txt = self.formataNumero(txt, 7)
        BoletoDados.setContaCedente(self,txt)

    def getAgenciaContaCedente(self):
        dv = self.__getDigitaoCobranca()
        s = "%s/%s-%s" % (self.getAgenciaCedente(), self.getContaCedente(), dv)
        return s

    def getCodigoDvBanco(self):
        cod = "%s-%s" % (self.getCodigoBanco(), self._modulo11(self.getCodigoBanco()))
        return cod

    def getLinhaDigitavel(self):
        bloco1 = "%3s%1s%1s%3s%1s" % ( \
            self.getCodigoBanco(), \
            self.getMoeda(),
            self.getAgenciaCedente()[0],
            self.getAgenciaCedente()[1:],
            self.getContaCedente()[0]
        )
        bloco1dv = self._modulo10( bloco1 )

        bloco2 = "%6s%1s%3s" % (
            self.getContaCedente()[1:],
            self.__getDigitaoCobranca(),
            self.getNossoNumero()[0:3]
        )
        bloco2dv = self._modulo10( bloco2 )

        bloco3 = "%10s" % (self.getNossoNumero()[3:])
        bloco3dv = self._modulo10( bloco3 )

        bloco4 = self.__getDigitaoCodigoBarras()

        bloco5 = "%4s%10s" % ( \
            self._fatorVencimento(self.getDataVencimento()),
            self.formataValor(self.getValorDocumento(),10)
        )

        linha = "%s.%s%s  %s.%s%s  %s.%s%s  %s  %s" % ( \
            bloco1[0:5],
            bloco1[5:],
            bloco1dv,
            bloco2[0:5],
            bloco2[5:],
            bloco2dv,
            bloco3[0:5],
            bloco3[5:],
            bloco3dv,
            bloco4,
            bloco5,
        )

        return linha

    def getNumCodigoBarra(self):
        num = "%3s%1s%1s%4s%10s%4s%7s%1s%13s" % ( \
            self.getCodigoBanco(), \
            self.getMoeda(),
            self.__getDigitaoCodigoBarras(),
            self._fatorVencimento(self.getDataVencimento()),
            self.formataValor(self.getValorDocumento(),10),
            self.getAgenciaCedente(),
            self.getContaCedente(),
            self.__getDigitaoCobranca(),
            self.getNossoNumero(),
        )
        return num

    def getLogoImagePath(self):
        return os.path.dirname(__file__) + "/logo_bancoreal.jpg"

    def __getDigitaoCobranca(self):
        num = "%s%s%s" % (self.getNossoNumero(), self.getAgenciaCedente(), self.getContaCedente())
        dv = self._modulo10(num)
        return dv

    def __getDigitaoCodigoBarras(self):
        num = "%3s%1s%4s%10s%4s%7s%1s%13s" % (\
            self.getCodigoBanco(),
            self.getMoeda(),
            self._fatorVencimento(self.getDataVencimento()),
            self.formataValor(self.getValorDocumento(),10),
            self.getAgenciaCedente(),
            self.getContaCedente(),
            self.__getDigitaoCobranca(),
            self.getNossoNumero(),
        )
        dv = self._modulo11(num)
        return dv
